From dc1c1e8af94e0ad631f3389c487d1df3313f5523 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 22 Jul 2020 16:32:09 +0100 Subject: [PATCH] a11y: Add more test API --- gtk/gtktestatcontext.c | 94 +++++++++++++++++++++++++++----- gtk/gtktestatcontext.h | 118 +++++++++++++++++++++++++++++++++-------- 2 files changed, 175 insertions(+), 37 deletions(-) diff --git a/gtk/gtktestatcontext.c b/gtk/gtktestatcontext.c index 1bae6625d8..a88b7af3fa 100644 --- a/gtk/gtktestatcontext.c +++ b/gtk/gtktestatcontext.c @@ -140,14 +140,44 @@ gtk_test_accessible_has_property (GtkAccessible *accessible, return gtk_at_context_has_accessible_property (context, property); } +gboolean +gtk_test_accessible_has_state (GtkAccessible *accessible, + GtkAccessibleState state) +{ + GtkATContext *context; + + g_return_val_if_fail (GTK_IS_ACCESSIBLE (accessible), FALSE); + + context = gtk_accessible_get_at_context (accessible); + if (context == NULL) + return FALSE; + + return gtk_at_context_has_accessible_state (context, state); +} + +gboolean +gtk_test_accessible_has_relation (GtkAccessible *accessible, + GtkAccessibleRelation relation) +{ + GtkATContext *context; + + g_return_val_if_fail (GTK_IS_ACCESSIBLE (accessible), FALSE); + + context = gtk_accessible_get_at_context (accessible); + if (context == NULL) + return FALSE; + + return gtk_at_context_has_accessible_relation (context, relation); +} + void -gtk_test_accessible_assertion_message_cmprole (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - GtkAccessible *accessible, - GtkAccessibleRole role) +gtk_test_accessible_assertion_message_role (const char *domain, + const char *file, + int line, + const char *func, + const char *expr, + GtkAccessible *accessible, + GtkAccessibleRole role) { char *role_name = g_enum_to_string (GTK_TYPE_ACCESSIBLE_ROLE, role); char *s = g_strdup_printf ("%s:accessible-role == %s", @@ -161,13 +191,13 @@ gtk_test_accessible_assertion_message_cmprole (const char *domain, } void -gtk_test_accessible_assertion_message_cmpproperty (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - GtkAccessible *accessible, - GtkAccessibleProperty property) +gtk_test_accessible_assertion_message_property (const char *domain, + const char *file, + int line, + const char *func, + const char *expr, + GtkAccessible *accessible, + GtkAccessibleProperty property) { char *s = g_strdup_printf ("%s:accessible-property == %s", G_OBJECT_TYPE_NAME (accessible), @@ -177,3 +207,39 @@ gtk_test_accessible_assertion_message_cmpproperty (const char *domain g_free (s); } + +void +gtk_test_accessible_assertion_message_state (const char *domain, + const char *file, + int line, + const char *func, + const char *expr, + GtkAccessible *accessible, + GtkAccessibleState state) +{ + char *s = g_strdup_printf ("%s:accessible-state == %s", + G_OBJECT_TYPE_NAME (accessible), + gtk_accessible_state_get_attribute_name (state)); + + g_assertion_message_expr (domain, file, line, func, s); + + g_free (s); +} + +void +gtk_test_accessible_assertion_message_relation (const char *domain, + const char *file, + int line, + const char *func, + const char *expr, + GtkAccessible *accessible, + GtkAccessibleRelation relation) +{ + char *s = g_strdup_printf ("%s:accessible-relation == %s", + G_OBJECT_TYPE_NAME (accessible), + gtk_accessible_relation_get_attribute_name (relation)); + + g_assertion_message_expr (domain, file, line, func, s); + + g_free (s); +} diff --git a/gtk/gtktestatcontext.h b/gtk/gtktestatcontext.h index 50ab7302d5..1d99a7cf1f 100644 --- a/gtk/gtktestatcontext.h +++ b/gtk/gtktestatcontext.h @@ -28,21 +28,72 @@ G_BEGIN_DECLS -#define gtk_test_accessible_assert_cmprole(accessible,role) G_STMT_START { \ +/** + * gtk_test_accessible_assert_role: + * @accessible: a #GtkAccessible + * @role: a #GtkAccessibleRole + * + * Checks whether a #GtkAccessible implementation has the given @role, + * and raises an assertion if the condition is failed. + */ +#define gtk_test_accessible_assert_role(accessible,role) G_STMT_START { \ GtkAccessible *__a = GTK_ACCESSIBLE (accessible); \ GtkAccessibleRole __r = (role); \ if (gtk_test_accessible_has_role (__a, __r)) ; else \ - gtk_test_accessible_assertion_message_cmprole (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #accessible " == " #role, \ - __a, __r); \ + gtk_test_accessible_assertion_message_role (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ + #accessible " == " #role, \ + __a, __r); \ } G_STMT_END -#define gtk_test_accessible_assert_cmpproperty(accessible,property) G_STMT_START { \ +/** + * gtk_test_accessible_assert_property: + * @accessible: a #GtkAccessible + * @property: a #GtkAccessibleProperty + * + * Checks whether a #GtkAccessible implementation contains the + * given @property, and raises an assertion if the condition is + * failed. + */ +#define gtk_test_accessible_assert_property(accessible,property) G_STMT_START { \ GtkAccessible *__a = GTK_ACCESSIBLE (accessible); \ GtkAccessibleProperty __p = (property); \ if (gtk_test_accessible_has_property (__a, __p)) ; else \ - gtk_test_accessible_assertion_message_cmpproperty (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ - #accessible " == " #property, \ - __a, __p); \ + gtk_test_accessible_assertion_message_property (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ + #accessible " has " #property, \ + __a, __p); \ + } G_STMT_END +/** + * gtk_test_accessible_assert_relation: + * @accessible: a #GtkAccessible + * @relation: a #GtkAccessibleRelation + * + * Checks whether a #GtkAccessible implementation contains the + * given @relation, and raises an assertion if the condition is + * failed. + */ +#define gtk_test_accessible_assert_relation(accessible,relation) G_STMT_START { \ + GtkAccessible *__a = GTK_ACCESSIBLE (accessible); \ + GtkAccessibleRelation __r = (relation); \ + if (gtk_test_accessible_has_relation (__a, __r)) ; else \ + gtk_test_accessible_assertion_message_relation (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ + #accessible " has " #relation, \ + __a, __r); \ + } G_STMT_END +/** + * gtk_test_accessible_assert_state: + * @accessible: a #GtkAccessible + * @state: a #GtkAccessibleState + * + * Checks whether a #GtkAccessible implementation contains the + * given @state, and raises an assertion if the condition is + * failed. + */ +#define gtk_test_accessible_assert_state(accessible,state) G_STMT_START { \ + GtkAccessible *__a = GTK_ACCESSIBLE (accessible); \ + GtkAccessibleState __s = (state); \ + if (gtk_test_accessible_has_state (__a, __s)) ; else \ + gtk_test_accessible_assertion_message_state (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \ + #accessible " has " #state, \ + __a, __s); \ } G_STMT_END GDK_AVAILABLE_IN_ALL @@ -51,23 +102,44 @@ gboolean gtk_test_accessible_has_role (GtkAccessible * GDK_AVAILABLE_IN_ALL gboolean gtk_test_accessible_has_property (GtkAccessible *accessible, GtkAccessibleProperty property); - GDK_AVAILABLE_IN_ALL -void gtk_test_accessible_assertion_message_cmprole (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - GtkAccessible *accessible, - GtkAccessibleRole role) G_GNUC_NORETURN; +gboolean gtk_test_accessible_has_relation (GtkAccessible *accessible, + GtkAccessibleRelation relation); GDK_AVAILABLE_IN_ALL -void gtk_test_accessible_assertion_message_cmpproperty (const char *domain, - const char *file, - int line, - const char *func, - const char *expr, - GtkAccessible *accessible, - GtkAccessibleProperty property) G_GNUC_NORETURN; +gboolean gtk_test_accessible_has_state (GtkAccessible *accessible, + GtkAccessibleState state); +GDK_AVAILABLE_IN_ALL +void gtk_test_accessible_assertion_message_role (const char *domain, + const char *file, + int line, + const char *func, + const char *expr, + GtkAccessible *accessible, + GtkAccessibleRole role) G_GNUC_NORETURN; +GDK_AVAILABLE_IN_ALL +void gtk_test_accessible_assertion_message_property (const char *domain, + const char *file, + int line, + const char *func, + const char *expr, + GtkAccessible *accessible, + GtkAccessibleProperty property) G_GNUC_NORETURN; +GDK_AVAILABLE_IN_ALL +void gtk_test_accessible_assertion_message_relation (const char *domain, + const char *file, + int line, + const char *func, + const char *expr, + GtkAccessible *accessible, + GtkAccessibleRelation relation) G_GNUC_NORETURN; +GDK_AVAILABLE_IN_ALL +void gtk_test_accessible_assertion_message_state (const char *domain, + const char *file, + int line, + const char *func, + const char *expr, + GtkAccessible *accessible, + GtkAccessibleState state) G_GNUC_NORETURN; G_END_DECLS -- 2.30.2